Many modern businesses are in need of storage infrastructure that supports modern-scale applications by reacting quickly and efficiently to changing conditions. Examples of such modern-scale applications include financial trading, electronic auctioning, social networking, and multi-player gaming applications. These types of modern-scale applications benefit from storage infrastructure that offers high availability, high scalability, and low latencies. In addition, transactional consistency may be important because these types of applications are often being returned and re-engineered to meet users' needs. Transactional consistency provided by internal system interfaces allows system architects to build simpler migration paths as architecture evolves from one to another.
Traditional solutions that aim to solve this problem, such as databases, provide transactions and continuous operation, but have limited scalability and high latencies. For example, databases include many features that, when combined, result in compromises that limit their scalability. Databases also have limited response times because disks are the primary storage for databases. In addition, traditional file systems and block stores have similar problems, lack transactions, and also provide interfaces that are not well suited for modern-scale applications. Therefore, there is a recent push to use new and simpler stores, or database management systems, which scale well and offer more streamlined key-value interfaces that are better suited to modern-scale applications. Unfortunately, most of these stores sacrifice consistency for improved availability and, hence, lack transactions.
Memory for a computer system is technically any form of electronic, magnetic, quantum-mechanical, or optical storage solutions. However, it is generally divided into different categories based in part upon speed and functionality. One category is mass storage, which typically includes permanent, non-volatile memory stores. Mass storage is generally understood to include relatively cheap, slow, and large-capacity devices, such as hard drives, tape drives, optical media, and other mass storage devices. The primary object of mass storage devices is to store an application or data until it is required for execution. To prevent loss of data, data is often replicated between two or more redundant storage devices. Replication introduces a degree of latency to the storage system. As used herein, the term “latency” refers to the delay between the time at which a client makes a request to a service and the time at which it receives a response from a service. The service is any system that promises to support an interface, and the system can be composed of memory, storage, networks, or computers of a variety of types. Mass storage devices typically provide a computer system with storage capacity ranging to the tens of terabytes and operate with access times generally in excess of one millisecond. However, because mass storage typically involves high latencies, the use of mass storage may not be sufficient for modern-scale applications, which require fast reaction times.
A second general memory category is application memory, or main memory, which is intended to permit quick access for processing and is typically connected by a memory bus directly to the computers processor. In contrast to the relatively slow mass storage, main memory generally includes relatively fast, expensive, volatile random access memory (RAM) with access times generally less than one hundred nanoseconds. However, due to the volatile nature of main memory, many applications utilizing main memory rely on a continuous power supply to maintain functionality.